﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.OleDb;
using System.Data;

namespace Controllers
{
    public class RendicionController
    {
        public static decimal ObtenerRendicionTotal(int choferId, int turnoId, string fecha)
        {
            var sql = "Select sum(Viaje_Importe)[Total]  From Superacidos.Viaje" + 
                     " WHERE Viaje_ChoferId = " + choferId +
                     " AND Viaje_TurnoId = " + turnoId +
                     " AND CAST(CONVERT(varchar,Viaje_Fecha, 101) AS DATETIME)  = '" + fecha + "'";
            var reader = ConexionBaseDeDatos.GetData(sql, CommandType.Text);
            reader.Read();
            if (reader["Total"] != DBNull.Value)
            {
                return ((decimal)reader["Total"]);
            }
            else
            {
                return 0;
            }
           
        }

        public static bool ValidarRendicion(int choferId, int turnoId, string fecha)
        {
            var sql = "Select count(*) as Cantidad  From Superacidos.Rendicion" +
                     " WHERE Rendicion_ChoferId = " + choferId +
                     " AND Rendicion_TurnoId = " + turnoId +
                     " AND Rendicion_Fecha  = '" + fecha + "'";
            var cantidad = 0;
            var reader = ConexionBaseDeDatos.GetData(sql, CommandType.Text);
            reader.Read();
            if (reader["Cantidad"] != DBNull.Value)
            {
                cantidad = (int)reader["Cantidad"];
            }
            return (cantidad > 0);

        }

        public static List<Viaje> ObtenerViajes(int choferId, int turnoId, string fecha)
        {
            var list = new List<Viaje>();

            var sql = "Select Viaje_Fecha,cl.Cliente_Apellido + ' ' + cl.Cliente_Nombre AS Viaje_Cliente, c.Chofer_Apellido + ' ' + c.Chofer_Nombre AS Viaje_Chofer, t .Turno_Descripcion AS Viaje_turno, a.Auto_Patente AS Viaje_Auto,  v.Viaje_Importe AS Viaje_Importe,Viaje_Id,Viaje_Cant_Fichas,Viaje_AutoId, Viaje_Fecha, Viaje_TurnoId, Viaje_ChoferId,Viaje_ClienteId    From Superacidos.Viaje v " +
                     "INNER JOIN SUPERACIDOS.Auto a ON v.Viaje_AutoId = a.Auto_Id "+
                     "INNER JOIN SUPERACIDOS.Turno t ON v.Viaje_TurnoId = t .Turno_Id "+
                     "INNER JOIN SUPERACIDOS.Chofer c ON v.Viaje_ChoferId = c.Chofer_Id "+
                     "LEFT JOIN SUPERACIDOS.Cliente cl ON v.Viaje_ClienteId = cl.Cliente_Id " +
                     " WHERE Viaje_ChoferId = " + choferId +
                     " AND Viaje_TurnoId = " + turnoId +
                     " AND CAST(CONVERT(varchar,Viaje_Fecha, 101) AS DATETIME)  = '" + fecha + "'";
            

            var reader = ConexionBaseDeDatos.GetData(sql, CommandType.Text);

            if (reader.HasRows)
            {
                while (reader.Read())
                {
                    list.Add(ObtenerObjeto(reader));
                }
            }

            return list;
        }

        public static Viaje ObtenerObjeto(OleDbDataReader reader)
        {
            var Viaje = new Viaje();

            if (reader["Viaje_Id"] != DBNull.Value)
                Viaje.Viaje_Id = Convert.ToInt32(reader["Viaje_Id"]);
            if (reader["Viaje_Fecha"] != DBNull.Value)
                Viaje.Viaje_Fecha = (DateTime)reader["Viaje_Fecha"];
            if (reader["Viaje_TurnoId"] != DBNull.Value)
                Viaje.Viaje_TurnoId = (int)reader["Viaje_TurnoId"];
            if (reader["Viaje_Turno"] != DBNull.Value)
                Viaje.Viaje_Turno = (string)reader["Viaje_Turno"];
            if (reader["Viaje_ChoferId"] != DBNull.Value)
                Viaje.Viaje_ChoferId = (int)reader["Viaje_ChoferId"];
            if (reader["Viaje_Chofer"] != DBNull.Value)
                Viaje.Viaje_Chofer = (string)reader["Viaje_Chofer"];
            if (reader["Viaje_AutoId"] != DBNull.Value)
                Viaje.Viaje_AutoId = (int)reader["Viaje_AutoId"];
            if (reader["Viaje_Cant_Fichas"] != DBNull.Value)
                Viaje.Viaje_Cant_Fichas = (decimal)reader["Viaje_Cant_Fichas"];
            if (reader["Viaje_ClienteId"] != DBNull.Value)
                Viaje.Viaje_ClienteId = (int)reader["Viaje_ClienteId"];
            if (reader["Viaje_Cliente"] != DBNull.Value)
                Viaje.Viaje_Cliente = (string)reader["Viaje_Cliente"];
            if (reader["Viaje_Auto"] != DBNull.Value)
                Viaje.Viaje_Auto = (string)reader["Viaje_Auto"];
            if (reader["Viaje_Importe"] != DBNull.Value)
                Viaje.Viaje_Importe = (decimal)reader["Viaje_Importe"];


            return Viaje;
        }

        public static void Agregar(int choferId, int turnoId, string fecha,string importe)
        {
            var sql = "INSERT INTO SUPERACIDOS.Rendicion (Rendicion_ChoferId,Rendicion_TurnoId,Rendicion_Fecha,Rendicion_Importe) " +
                       " VALUES ({0},{1},'{2}',{3})";

            sql = string.Format(sql, choferId,turnoId,fecha, importe );


            ConexionBaseDeDatos.Guardar(sql, CommandType.Text);

        }


        public static int ObtenerCantidad(int choferId, int turnoId, string fecha)
        {
            var sql = "Select count(*) as Cantidad  From Superacidos.Viaje" +
                     " WHERE Viaje_ChoferId = " + choferId +
                     " AND Viaje_TurnoId = " + turnoId +
                     " AND Viaje_Fecha = '" + fecha + "'";
           
            var cantidad = 0;
            var reader = ConexionBaseDeDatos.GetData(sql, CommandType.Text);

            if (reader.HasRows)
            {
                reader.Read();
                if (reader["Cantidad"] != DBNull.Value)
                    cantidad = (int)reader["Cantidad"];

            }

            return cantidad;
        }
   
    }
}
